package com.mobile.service.inter;

import com.mobile.service.enums.WorkOrderEvent;
import com.mobile.service.statemachine.WorkOrderStateContext;
import com.mobile.util.Result;

/**
 * 工单状态机服务接口
 */
public interface WorkOrderStateMachineService {
    
    /**
     * 执行工单状态流转
     * @param workOrderId 工单ID
     * @param event 流转事件
     * @param context 流转上下文
     * @return 流转结果，包含成功状态和错误信息
     */
    Result<Boolean> executeTransition(Integer workOrderId, WorkOrderEvent event, WorkOrderStateContext context);
    
    /**
     * 获取工单当前可执行的事件列表
     * @param workOrderId 工单ID
     * @return 可执行的事件列表
     */
    java.util.Set<WorkOrderEvent> getAvailableEvents(Integer workOrderId);
    
    /**
     * 根据状态码获取可执行的事件列表
     * @param statusCode 状态码
     * @return 可执行的事件列表
     */
    java.util.Set<WorkOrderEvent> getAvailableEventsByStatus(String statusCode);
    
    /**
     * 检查状态流转是否合法
     * @param workOrderId 工单ID
     * @param event 流转事件
     * @return 是否合法
     */
    boolean isValidTransition(Integer workOrderId, WorkOrderEvent event);
}